#include <stdio.h>
#include <unistd.h>
#include <string.h>

#include "xbox_gamepad_linux_interface.h"


int main(void) {
  int xbox_fd;
  xbox_map_t map;
  int len;

  memset(&map, 0, sizeof(xbox_map_t)); 

  xbox_fd = xbox_open("/dev/input/js0");
  if (xbox_fd < 0) {
    return -1;
  }

  while (1) {
    len = xbox_map_read(xbox_fd, &map);
    if (len < 0) {
      usleep(10 * 1000);
      continue;
    }

    printf("\rTime:%8d A:%d B:%d X:%d Y:%d LB:%d RB:%d start:%d back:%d "
        "LO:%d RO:%d XX:%-6d YY:%-6d LX:%-6d LY:%-6d RX:%-6d RY:%-6d LT:%-6d "
        "RT:%-6d",
        map.time, map.a, map.b, map.x, map.y, map.lb, map.rb, map.start,
        map.back, map.lo_b, map.ro_b, map.xx, map.yy, map.lx, map.ly,
        map.rx, map.ry, map.lt, map.rt);


    printf("\r\nLeftJoyX:%-6d,LeftJoyY:%-6d,RightJoyX:%-6d,RightJoyY:%-6d\n", map.lx, map.ly, map.rx, map.ry);
    
    if (map.a == 1) {
      printf("\r\nA_KEYPRESS\n");
    }

    if (map.b == 1) {
      printf("\r\nB_KEYPRESS\n");
    }

    if (map.x == 1) {
      printf("\r\nX_KEYPRESS\n");
    }

    if (map.y == 1) {
      printf("\r\nY_KEYPRESS\n");
    }

    if (map.lb == 1) {
      printf("\r\nLB_KEYPRESS\n");
    }

    if (map.rb == 1) {
      printf("\r\nRB_KEYPRESS\n");
    }

    if (map.back == 1) {
      printf("\r\nBACK_KEYPRESS\n");
    }

    if (map.start == 1) {
      printf("\r\nSTART_KEYPRESS\n");
    }

    if (map.lo_b == 1 && map.lt == XBOX_AXIS_VAL_MAX) {
      printf("\r\nLT_KEYPRESS\n");
    }

    if (map.ro_b == 1 && map.rt == XBOX_AXIS_VAL_MAX) {
      printf("\r\nRT_KEYPRESS\n");
    }

    if (map.xx == XBOX_AXIS_VAL_LEFT) {
      printf("\r\nLEFT_KEYPRESS\n");
    } else if (map.xx == XBOX_AXIS_VAL_RIGHT) {
      printf("\r\nRIGHT_KEYPRESS\n");
    }

    if (map.yy == XBOX_AXIS_VAL_UP) {
      printf("\r\nUP_KEYPRESS\n");
    } else if (map.yy == XBOX_AXIS_VAL_DOWN) {
      printf("\r\nDOWN_KEYPRESS\n");
    }

    

    fflush(stdout);
  }

  xbox_close(xbox_fd);
  return 0;
}
